package SortAlgorithm;

/**
 * @author gao
 * @date 2025/11/7 17:31
 */

public class SelectSort implements Sort {

    /**
     * 选择排序算法
     * @param nums 需要排序的整数数组
     */
    @Override
    public void sort(int[] nums) {
        int n = nums.length; // 获取数组的长度
        // 外层循环：遍历数组中的每一个元素
        for (int i = 0; i < n; i++) {
            int MinIndex = i; // 初始化最小值索引为当前循环的起始位置
            // 内层循环：从当前元素的下一个位置开始，遍历剩余元素
            for (int j = i + 1; j < n; j++) {
                // 如果找到比当前最小值更小的元素，则更新最小值索引
                if (nums[MinIndex] > nums[j]) {
                    MinIndex = j;
                }
            }
            // 交换当前元素与找到的最小值元素的位置
            swap(nums, i, MinIndex);
        }
    }

    private void swap(int[] nums, int i, int j) {
        int tmp = nums[i];
        nums[i] = nums[j];
        nums[j] = nums[i];
    }
}